package com.dabai.iot.core.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dabai.iot.common.enums.BizLogCode;
import com.dabai.iot.common.enums.BizLogType;
import com.dabai.iot.common.model.DeviceInfo;
import com.dabai.iot.common.model.IotMqttMessage;
import com.dabai.iot.common.model.IotMqttStatus;
import com.dabai.iot.core.dto.DeviceLogQuery;

import java.util.Date;
import java.util.Map;

/**
 * 设备日志 Service 接口
 *
 * @author kev1n
 */
public interface IDeviceLogService {

    /**
     * 创建设备日志超级表
     */
    void createDeviceLogStb(String tenantId, String productKey);

    /**
     * 设备日志分页 from tdengine
     */
    IPage<Map<String, Object>> getDeviceLogPageFromTD(IPage<Map<String, Object>> page, DeviceLogQuery deviceLogQuery);

    /**
     * 保存设备状态日志到时序数据库
     */
    void saveDeviceStatusLogToTD(DeviceInfo deviceInfo, IotMqttStatus mqttStatus);

    /**
     * 保存设备消息日志到时序数据库
     */
    void saveDeviceLogToTD(DeviceInfo deviceInfo, IotMqttMessage reportMessage, BizLogType logBizType, BizLogCode logCode);

    /**
     * 保存设备属性到时序数据库
     */
    void savePropertiesLogToTD(String productKey, String deviceSn, String jsonData);

    /**
     * 获取指定产品下所有设备某段事件内的消息数量
     */
    Long deviceMessageCount(String tenantId, String productKey, Date startTime, Date endTime);

}
